--- id: TASK-007 title: Dashboard polish status: "\U0001F3C1 Done" assignee: - '@humdrum-tiv' created_date: '2026-06-16 18:03' updated_date: '2026-06-18 01:17' labels: - bug dependencies: [] priority: low ordinal: 7000 --- ## Description Trim verbose ESPN pre-game status text overlapping the start time on cards. Make Up/Down cursor column-aware in the grid instead of linear through the flat list. ## Acceptance Criteria - [x] #1 pre-game card status no longer overlaps - [x] #2 Up/Down navigates grid by column/row ## Final Summary Dashboard polish: grid-aware cursor navigation; confirmed pre-game cards no longer overlap. What: - AC#2: Up/Down now move by visual grid ROW (keeping column) instead of ±1 through the flat list. nav.go reconstructs the rendered grid (gridRows, mirroring bodyLines' per-section sub-grids of a.columns()) and moveCursorVert steps rows, clamping the column for short/last rows. Arrow ←/→ move horizontally; they precede the league-nav cases (which also bind the arrows) so on the dashboard arrows move the cursor while tab/shift+tab still switch leagues. - AC#1: pre-game card status already shows only '○ ' (statusLine emits no detail pre-game), so there is no verbose ESPN text overlapping the time — verified, no change needed. Also (adjacent UX from this session): f/F now toggle favorites from the dashboard cursor and from standings rows; footer restored f/F and dropped 'a all' to de-crowd. Tests: TestMoveCursorVertical (2-wide grid row movement + column clamp). go vet + go test ./... pass.